/**
 综合练习
 (1)	键盘录⼊整⾏字符串，遇到quit结束录⼊，录⼊字符串格式为：学号.姓名.年龄.分数
 【示例】
 001.zs.20.68
 003.tom.19.78
 quit
 (2)	拆解上述整⾏的字符串得到属性值，然后实例化学⽣对象，按照"."分割字符串
 (3)	将学⽣对象添加到Map<学⽣,学号>集合中，要求：添加时 按照成绩逆序排列
 (4)	遍历输出集合
 (5)	判断 003号学⽣是否存在，如果存在，删除该学⽣
 (6)	再次遍历集合（使用另外一种方式）

 */
import java.util.*;

public class Test4 {
    public static void main(String[] args) {
        // (3) 创建TreeMap，按成绩逆序排列（分数高的在前）
        // 比较器：先按分数降序，分数相同则按学号升序（避免重复覆盖）
        Map<Student, String> studentMap = new TreeMap<>(
                Comparator.comparingDouble(Student::getScore).reversed()
                        .thenComparing(Student::getId)
        );

        // (1) 键盘录入字符串，遇到quit结束
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生信息（格式：学号.姓名.年龄.分数），输入quit结束：");

        while (true) {
            String input = scanner.nextLine().trim();
            if ("quit".equalsIgnoreCase(input)) {
                break;
            }

            // (2) 拆解字符串并实例化学生对象
            String[] parts = input.split("\\.");  // 按"."分割（注意转义）
            if (parts.length != 4) {
                System.out.println("格式错误，请重新输入！");
                continue;
            }

            try {
                String id = parts[0];
                String name = parts[1];
                int age = Integer.parseInt(parts[2]);
                double score = Double.parseDouble(parts[3]);

                // 创建学生对象并添加到Map（key为学生对象，value为学号）
                Student student = new Student(id, name, age, score);
                studentMap.put(student, id);
            } catch (NumberFormatException e) {
                System.out.println("年龄或分数格式错误，请重新输入！");
            }
        }

        // (4) 第一次遍历输出集合（使用entrySet()）
        System.out.println("\n=== 第一次遍历集合（entrySet()） ===");
        for (Map.Entry<Student, String> entry : studentMap.entrySet()) {
            System.out.println("学号：" + entry.getValue() + "，学生信息：" + entry.getKey());
        }

        // (5) 判断003号学生是否存在，存在则删除
        Student target = null;
        for (Student student : studentMap.keySet()) {
            if ("003".equals(student.getId())) {
                target = student;
                break;
            }
        }

        if (target != null) {
            studentMap.remove(target);
            System.out.println("\n已删除003号学生");
        } else {
            System.out.println("\n003号学生不存在");
        }

        // (6) 第二次遍历集合（使用keySet()）
        System.out.println("\n=== 第二次遍历集合（keySet()） ===");
        for (Student student : studentMap.keySet()) {
            System.out.println("学号：" + studentMap.get(student) + "，学生信息：" + student);
        }

        scanner.close();
    }
}
